package com.liqi.frame.comm.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.liqi.frame.comm.base.BaseDao;
import com.liqi.frame.comm.po.Group;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 组织的数据访问对象
 * @author liqi on 2018/1/31.
 * liqiwork@qq.com
 */
public interface GroupDao extends BaseDao<Group> {
    List<Group> getGroupAndSonsByGroupId(@Param("groupId") String groupId);

    List<Group> getSonsByGroupId(@Param("groupId") String groupId);

    /**
     * 取指定组织id的组织和其子级组织
     * @param groupName 要搜索的组织名称
     * @param groupId 指定的组织id
     * @return
     */
    List<Group> getGroupListWithName(@Param("groupName") String groupName, @Param("groupId") String groupId);
    IPage<Group> getGroupListWithName(@Param("groupName") String groupName, @Param("groupId") String groupId, Page page);

    /**
     * 取指定父组织下的组织
     * @param groupName 要搜索的组织名称
     * @return
     */
    List<Group> getGroupListByName(@Param("groupName") String groupName, @Param("parentId") String parentId);

    Group getGroupById(@Param("id") String id);

    int insertObject(@Param("id") String id,
                     @Param("groupKey") String groupKey,
                     @Param("groupName") String groupName,
                     @Param("comment") String comment,
                     @Param("orderId") Float orderId,
                     @Param("parentId") String parentId,
                     @Param("parentName") String parentName,
                     @Param("parentIds") String parentIds,
                     @Param("level") Integer level);

    int updateObject(@Param("id") String id,
                     @Param("groupKey") String groupKey,
                     @Param("groupName") String groupName,
                     @Param("comment") String comment,
                     @Param("orderId") Float orderId,
                     @Param("parentId") String parentId,
                     @Param("parentName") String parentName,
                     @Param("parentIds") String parentIds);

    int deleteObjectById(@Param("id") String id);

    List<Group> getGroupList();

    List<Group> getGroupListByParentId(@Param("parentId") String parentId);
}
